Instalando e carregando pacotes que serão utilizados no projeto.

  #Lista de pacotes instalados
vetor_pacotes
##  [1] "readr"      "ggplot2"    "plotly"     "psych"      "e1071"     
##  [6] "dplyr"      "Hmisc"      "DescTools"  "esquisse"   "gridExtra" 
## [11] "devtools"   "tidyverse"  "kableExtra"

Importando o banco ENADE

O arquivo “MICRODADOS_ENADE_2017.txt” foi obtido em http://portal.inep.gov.br/microdados

(microdados_Enade_2017_portal_2018.10.09.zip)

enade_2017 = read_csv2("MICRODADOS_ENADE_2017.txt")
## ℹ Using ',' as decimal and '.' as grouping mark. Use `read_delim()` for more control.
## 
## ── Column specification ────────────────────────────────────────────────────────
## cols(
##   .default = col_double(),
##   TP_SEXO = col_character(),
##   DS_VT_GAB_OFG_ORIG = col_character(),
##   DS_VT_GAB_OFG_FIN = col_character(),
##   DS_VT_GAB_OCE_ORIG = col_character(),
##   DS_VT_GAB_OCE_FIN = col_character(),
##   DS_VT_ESC_OFG = col_character(),
##   DS_VT_ACE_OFG = col_character(),
##   DS_VT_ESC_OCE = col_character(),
##   DS_VT_ACE_OCE = col_character(),
##   CO_RS_I1 = col_character(),
##   CO_RS_I2 = col_character(),
##   CO_RS_I3 = col_character(),
##   CO_RS_I4 = col_character(),
##   CO_RS_I5 = col_character(),
##   CO_RS_I6 = col_character(),
##   CO_RS_I7 = col_character(),
##   CO_RS_I8 = col_character(),
##   CO_RS_I9 = col_character(),
##   QE_I01 = col_character(),
##   QE_I02 = col_character()
##   # ... with 36 more columns
## )
## ℹ Use `spec()` for the full column specifications.
# Exibindo uma linha do arquivo MICRODADOS_ENADE_2017.txt
dim(enade_2017)
## [1] 537436    150

Filtrando e classificando as variáveis quanto ao tipo.

NT_OBJ_FG - “Nota bruta na parte objetiva da formação geral. (valor de 0 a 100)” - Variável Quantitativa Contínua, por ser obtida por uma medição. Geralmente representada por números reais.

CO_GRUPO - “Código da área de enquadramento do curso no Enade” - Variável Qualitativa Nominal, por não ser possível determinar uma ordenação.

CO_REGIAO_CURSO - “Código da região de funcionamento do curso” - Variável Qualitativa Nominal, por não ser possível determinar uma ordenação.

QE_I02 - “Qual é a sua cor ou raça?” - Variável Qualitativa Nominal, por não ser possível determinar uma ordenação.

CO_TURNO_GRADUACAO - “Código do turno de graduação” - Variável Qualitativa Nominal, por não ser possível determinar uma ordenação.

QE_I01 - “Qual o seu estado civil?” - Variável Qualitativa Nominal, por não ser possível determinar uma ordenação.

QE_I08 - “Qual a renda total de sua família, incluindo seus rendimentos?” - Variável Quantitativa Contínua, por ser obtida por uma medição. Geralmente representada por números reais.,

QE_I21 - “Alguém em sua família concluiu um curso superior?” - Variavel Qualitativa Ordinal, a qual é possível ordenar.

QE_I22 - “Excetuando-se os livros indicados na bibliografia do seu curso, quantos livros você leu neste ano?” - Por ser uma estimativa (Um ou dois/Mais de oito), eu entendo que seja uma Variável Qualitativa Ordinal. Entretanto, se a quantidade de livros lidos no ano fosse uma informação exata ( Um livro, dois livros) seria uma variável Quantitativa Discreta.

QE_I23 - “Quantas horas por semana, aproximadamente, você dedicou aos estudos, excetuando as horas de aula?” - Por ser uma estimativa (De uma a três/ Mais de doze), eu entendo que seja uma Variável Qualitativa Ordinal. Entretanto, se a quantidade de livros lidos no ano fosse uma informação exata ( Uma hora de estudo, Duas horas de estudo) seria uma variável Quantitativa Discreta.

NU_IDADE - “Idade do inscrito em 26/11/2017” - Variavel Quantitativa Discreta. Por ser obtida a partir da contagem de anos do estudante na data informada.

enade_2017_filtrados = enade_2017 %>% dplyr::select(
  NT_OBJ_FG,
  NT_OBJ_CE,
  NT_GER,
  CO_GRUPO,
  CO_REGIAO_CURSO,
  QE_I02,
  CO_TURNO_GRADUACAO,
  TP_SEXO,
  QE_I01,
  QE_I08,
  QE_I21,
  QE_I22,
  QE_I23,
  NU_IDADE
)
# Exibindo uma linha do arquivo, filtrando as 11 colunas listadas
dim(enade_2017_filtrados)
## [1] 537436     14

O arquivo “Dicionário de variaveis dos Microdados do Enade_Edição 2017.ods” foi obtido em http://portal.inep.gov.br/microdados

(microdados_Enade_2017_portal_2018.10.09.zip)

Escolhendo um curso do ENADE

O curso escolhido é o curso de “Licenciatura em História”, representado pelo código 2402

enade_historia_2017 = enade_2017_filtrados %>% filter(CO_GRUPO == 2402)
# Licenciatura História 2017 - 18.531 registros
dim(enade_historia_2017)
## [1] 18531    14

Transformando as variáveis com rótulos legíveis, para melhor interpretação.

#Região
enade_historia_2017 = enade_historia_2017 %>%  mutate(
  Regiao = case_when(
    CO_REGIAO_CURSO == 1 ~ "Norte",
    CO_REGIAO_CURSO == 2 ~ "Nordeste",
    CO_REGIAO_CURSO == 3 ~ "Sudeste",
    CO_REGIAO_CURSO == 4 ~ "Sul",
    CO_REGIAO_CURSO == 5 ~ "Centro-Oeste",
    TRUE ~ as.character(CO_REGIAO_CURSO)
  )
)
#Sexo
enade_historia_2017 = enade_historia_2017 %>% mutate(Sexo = case_when (
  TP_SEXO == "M" ~ "Masculino",
  TP_SEXO == "F" ~ "Feminino",
  TRUE ~ as.character(TP_SEXO)
))
#Estado civil
enade_historia_2017 = enade_historia_2017 %>% mutate(
  Estado_Civil = case_when(
    QE_I01 == "A" ~ "Solteiro(a)",
    QE_I01 == "B" ~ "Casado(a)",
    QE_I01 == "C" ~ "Separado(a) judicialmente/divorciado(a)",
    QE_I01 == "D" ~ "Viúvo(a)",
    QE_I01 == "E" ~ "Outro",
    TRUE ~ as.character(QE_I01)
  )
)
#Raça / cor
enade_historia_2017 = enade_historia_2017 %>% mutate(
  Raca_Cor = case_when(
    QE_I02 == "A" ~ "Branca",
    QE_I02 == "B" ~ "Preta",
    QE_I02 == "C" ~ "Amarela",
    QE_I02 == "D" ~ "Parda",
    QE_I02 == "E" ~ "Indígena",
    QE_I02 == "F" ~ "Não quero declarar",
    TRUE ~ as.character(QE_I02)
  )
)
#Período
enade_historia_2017 = enade_historia_2017 %>% mutate(
  Turno_Graduacao = case_when(
    CO_TURNO_GRADUACAO == 1 ~ "Matutino",
    CO_TURNO_GRADUACAO == 2 ~ "Vespertino",
    CO_TURNO_GRADUACAO == 3 ~ "Integral",
    CO_TURNO_GRADUACAO == 4 ~ "Noturno",
    TRUE ~ as.character(CO_TURNO_GRADUACAO)
  )
)
#Renda total da família
enade_historia_2017 = enade_historia_2017 %>%  mutate(
  Renda_Familiar = case_when(
    QE_I08 == "A" ~ "Até 1,5 salário mínimo (até R$ 1.405,50)",
    QE_I08 == "B" ~ "De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00)",
    QE_I08 == "C" ~ "De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50)",
    QE_I08 == "D" ~ "De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00).",
    QE_I08 == "E" ~ "De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00)",
    QE_I08 == "F" ~ "De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00)",
    QE_I08 == "G" ~ "Acima de 30 salários mínimos (mais de R$ 28.110,00)",
    TRUE ~ as.character(QE_I08)
  )
)
#Alguém da família concluiu ensino superior
enade_historia_2017 = enade_historia_2017 %>% mutate(
  Alguem_Familia_Ensino_Superior = case_when(
    QE_I21 == "A" ~ "Sim",
    QE_I21 == "B" ~ "Não",
    TRUE ~ as.character(QE_I21)
  )
)
#Quantos livros foram lidos em 2017, exceto os livros relacionados ao curso
enade_historia_2017 = enade_historia_2017 %>%  mutate(
  Livros_Lidos_2017 = case_when(
    QE_I22 == "A" ~ "Nenhum",
    QE_I22 == "B" ~ "Um ou dois",
    QE_I22 == "C" ~ "De três a cinco",
    QE_I22 == "D" ~ "De seis a oito",
    QE_I22 == "E" ~ "Mais de oito",
    TRUE ~ as.character(QE_I22)
  )
)
# Quantas horas de estudo por semana. Aproximadamente.
enade_historia_2017 = enade_historia_2017 %>%  mutate(
  Horas_Estudo_Semana = case_when(
    QE_I23 == "A" ~ "Nenhuma, apenas assisto às aulas",
    QE_I23 == "B" ~ "De uma a três",
    QE_I23 == "C" ~ "De quatro a sete",
    QE_I23 == "D" ~ "De oito a doze",
    QE_I23 == "E" ~ "Mais de doze",
    TRUE ~ as.character(QE_I23)
  )
)
# Licenciatura História 2017 com as variáveis de forma legível - 5 registros
kbl(head(enade_historia_2017, 5), caption = "ENADE 2017 - História (Licenciatura) - 5 registros") %>%
  kable_styling(bootstrap_options = "striped", full_width = F)
ENADE 2017 - História (Licenciatura) - 5 registros
NT_OBJ_FG NT_OBJ_CE NT_GER CO_GRUPO NU_IDADE Regiao Sexo Estado_Civil Raca_Cor Turno_Graduacao Renda_Familiar Alguem_Familia_Ensino_Superior Livros_Lidos_2017 Horas_Estudo_Semana
12.5 37.5 29.7 2402 40 Centro-Oeste Feminino Separado(a) judicialmente/divorciado(a) Amarela Matutino Até 1,5 salário mínimo (até R$ 1.405,50) Sim Nenhum De quatro a sete
50.0 45.8 45.5 2402 21 Centro-Oeste Masculino Solteiro(a) Preta Matutino Até 1,5 salário mínimo (até R$ 1.405,50) Não Mais de oito De quatro a sete
75.0 62.5 65.2 2402 25 Centro-Oeste Feminino Solteiro(a) Preta Matutino De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) Não Mais de oito De oito a doze
37.5 66.7 55.2 2402 22 Centro-Oeste Feminino Solteiro(a) Parda Matutino Até 1,5 salário mínimo (até R$ 1.405,50) Sim Mais de oito De quatro a sete
50.0 29.2 33.7 2402 24 Centro-Oeste Masculino Solteiro(a) Branca Matutino Até 1,5 salário mínimo (até R$ 1.405,50) Não De seis a oito De quatro a sete

Resumo e remoção de valores faltantes (missing values)

Utilizando a função describe do pacote Hmisc e a função nativa summary para uma análise descritiva.

Verificando a quantidade de valores ausentes/missing values e os removendo.

#Verificando a quantidade de valores ausentes por variável
valores_ausentes = enade_historia_2017 %>%
  select(everything()) %>%  
  summarise_all(list(~sum(is.na(.))))
valores_ausentes %>% kbl(caption = "Quantidade de valores ausentes por variável") %>% kable_styling(full_width = F, font_size = 14)
Quantidade de valores ausentes por variável
NT_OBJ_FG NT_OBJ_CE NT_GER CO_GRUPO NU_IDADE Regiao Sexo Estado_Civil Raca_Cor Turno_Graduacao Renda_Familiar Alguem_Familia_Ensino_Superior Livros_Lidos_2017 Horas_Estudo_Semana
4012 4012 4012 0 0 0 0 3385 3385 0 3385 3385 3385 3385
enade_historia_2017_Sem_NA = enade_historia_2017 %>% na.omit()
#Quantidade de itens removidos
dim(enade_historia_2017)[1]
## [1] 18531
dim(enade_historia_2017_Sem_NA)[1]
## [1] 14163
dim(enade_historia_2017)[1] - dim(enade_historia_2017_Sem_NA)[1]
## [1] 4368

Obtemos alguns insights, como nota dos estudantes de História foi 44.34 Aproximadamente 39% dos futuros professores de História estão na região Sudeste. 43% se declara como Branca, têm média de idade de 30 anos. Por fim, o curso de licenciatura em História é bem divido entre homens e mulhes, com 50% dos alunos de cada sexo.

dim(enade_historia_2017_Sem_NA)
## [1] 14163    14
descr = describe(enade_historia_2017_Sem_NA)
descr$NT_OBJ_CE
## NT_OBJ_CE 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##    14163        0       25    0.995    44.34    20.07     16.7     20.8 
##      .25      .50      .75      .90      .95 
##     33.3     45.8     58.3     66.7     75.0 
## 
## lowest :   0.0   4.2   8.3  12.5  16.7, highest:  83.3  87.5  91.7  95.8 100.0
descr$Regiao
## Regiao 
##        n  missing distinct 
##    14163        0        5 
## 
## lowest : Centro-Oeste Nordeste     Norte        Sudeste      Sul         
## highest: Centro-Oeste Nordeste     Norte        Sudeste      Sul         
##                                                                            
## Value      Centro-Oeste     Nordeste        Norte      Sudeste          Sul
## Frequency          1031         3320          962         5613         3237
## Proportion        0.073        0.234        0.068        0.396        0.229
descr$Raca_Cor
## Raca_Cor 
##        n  missing distinct 
##    14163        0        6 
## 
## lowest : Amarela            Branca             Indígena           Não quero declarar Parda             
## highest: Branca             Indígena           Não quero declarar Parda              Preta             
##                                                                    
## Value                 Amarela             Branca           Indígena
## Frequency                 221               6175                103
## Proportion              0.016              0.436              0.007
##                                                                    
## Value      Não quero declarar              Parda              Preta
## Frequency                 688               4803               2173
## Proportion              0.049              0.339              0.153
descr$Sexo
## Sexo 
##        n  missing distinct 
##    14163        0        2 
##                               
## Value       Feminino Masculino
## Frequency       7075      7088
## Proportion       0.5       0.5
descr$NU_IDADE
## NU_IDADE 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##    14163        0       58    0.997    30.66    10.44       21       21 
##      .25      .50      .75      .90      .95 
##       23       27       36       45       51 
## 
## lowest : 19 20 21 22 23, highest: 72 75 77 78 80
summary(enade_historia_2017_Sem_NA$NT_GER)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   33.10   43.40   43.59   53.90   97.00
enade_historia_2017_Sem_NA %>% select(NT_OBJ_CE) %>%
  summarise(
    Quantidade = n(),
    Media = mean(NT_OBJ_CE),
    Mediana = median(NT_OBJ_CE),
    Moda = Mode(NT_OBJ_CE),
    CV = sd(NT_OBJ_CE) / Media * 100,
    Assimetria = skewness(NT_OBJ_CE),
    Curtose = kurtosis(NT_OBJ_CE)
  ) %>%  kbl %>%
  kable_styling(full_width = F)
Quantidade Media Mediana Moda CV Assimetria Curtose
14163 44.33507 45.8 41.7 39.76414 0.0633972 -0.4861355

Com Mediana > Média > Moda (45.8 > 44.33 > 41.7) , uma distribuição quase simétrica, com uma pequena assimetria positiva (Média - Moda > 0), conforme o cálculo de coeficiente de peason. O coeficiente de variação indica uma alta dispersão na nota bruta. E a medida de curtose indica que, embora os dados estejam próximos da moda, a curva estaria um pouco achatada (Platicúrtica).

hstgrm = ggplot(enade_historia_2017_Sem_NA, aes(x = NT_OBJ_CE)) +
  geom_histogram(color = "black",
                 fill = "green",
                 bins = 50,
                 aes(y = (..count..) / sum(..count..))) +
  ggtitle("Histograma da nota bruta dos estudantes de Licenciatura em História") +
  xlab("nota") +
  ylab("Frequência relativa")
ggplotly(hstgrm)
dnsdd = ggplot(enade_historia_2017_Sem_NA, aes(x = NT_OBJ_CE)) +
  geom_density(col = 2, size = 1, aes(y = 27 * (..count..) /
                                        sum(..count..))) +
  ggtitle("Curva de densidade da nota bruta dos estudantes de História (Licenciatura)") +
  xlab("nota") +
  ylab("Frequência relativa")
ggplotly(dnsdd)
hstdns = ggplot(enade_historia_2017_Sem_NA, aes(x = NT_OBJ_CE)) +
  geom_histogram(color = "black",
                 fill = "lightblue",
                 bins = 50,
                 aes(y = (..count..) / sum(..count..))) +
  geom_density(col = 2, size = 1,
               aes(y = 27 * (..count..) / sum(..count..))) +
  ggtitle("Histograma e curva de densidade da nota dos futuros professores de História") +
  xlab("nota") +
  ylab("Frequência relativa")
ggplotly(hstdns)
grid.arrange(hstgrm,
             dnsdd,
             hstdns,
             nrow = 3, ncol = 1)

## Continuação das análises

prop.table(table(enade_historia_2017_Sem_NA$Turno_Graduacao,
      enade_historia_2017_Sem_NA$Raca_Cor)) %>% kbl %>% kable_styling()
Amarela Branca Indígena Não quero declarar Parda Preta
Integral 0.0015533 0.0494246 0.0013415 0.0049425 0.0442703 0.0129916
Matutino 0.0026830 0.0585328 0.0007767 0.0067076 0.0506249 0.0270423
Noturno 0.0100967 0.3058674 0.0049425 0.0330438 0.2205041 0.0978606
Vespertino 0.0012709 0.0221704 0.0002118 0.0038834 0.0237238 0.0155334
enade_historia2 = enade_historia_2017_Sem_NA %>%
  select(Turno_Graduacao, Raca_Cor, NT_GER) %>%
  group_by(Turno_Graduacao, Raca_Cor) %>%
  summarise(
    Quantidade = n(),
    MediaNota = mean(NT_GER, na.rm = T),
    Mediana = median(NT_GER, na.rm = T),
    CV = sd(NT_GER, na.rm = T) / MediaNota * 100,
    AmplitudeInterquartil = IQR(NT_GER)
  ) %>%
  arrange(Turno_Graduacao, desc(Mediana))
## `summarise()` regrouping output by 'Turno_Graduacao' (override with `.groups` argument)
enade_historia2  %>% kbl %>% kable_styling(full_width = F)
Turno_Graduacao Raca_Cor Quantidade MediaNota Mediana CV AmplitudeInterquartil
Integral Branca 700 48.60157 48.35 32.00419 21.725
Integral Não quero declarar 70 47.57857 47.45 32.06615 19.325
Integral Parda 627 42.67496 42.30 34.06646 20.850
Integral Amarela 22 41.61818 41.40 32.06070 16.550
Integral Preta 184 39.88043 39.45 37.54678 21.900
Integral Indígena 19 33.67895 33.00 42.50468 15.100
Matutino Não quero declarar 95 46.59263 48.40 33.32585 24.550
Matutino Branca 829 46.65103 47.10 32.34485 20.900
Matutino Amarela 38 45.39474 44.85 25.85944 14.850
Matutino Parda 717 42.16499 41.40 33.79268 20.300
Matutino Preta 383 41.66057 41.10 34.01051 18.850
Matutino Indígena 11 40.26364 30.80 44.15798 25.100
Noturno Não quero declarar 468 44.98333 46.30 34.53219 21.225
Noturno Branca 4332 44.68209 44.70 32.57483 21.000
Noturno Preta 1386 41.83550 41.60 33.50963 19.900
Noturno Parda 3123 41.41639 40.90 33.58356 19.550
Noturno Amarela 143 40.14895 40.10 36.25642 19.800
Noturno Indígena 70 38.42429 36.60 36.00586 21.025
Vespertino Branca 314 50.09682 51.45 28.83293 21.225
Vespertino Indígena 3 45.43333 44.50 35.70099 16.200
Vespertino Parda 336 43.04435 42.65 32.96029 21.300
Vespertino Não quero declarar 55 42.37455 42.50 38.82803 19.000
Vespertino Preta 220 41.60136 41.95 32.53649 21.050
Vespertino Amarela 18 38.56667 35.30 48.57023 30.875

Ao agrupar por Turno e Raça, vemos que a maioria dos alunos estuda no período da noite, embora as melhores notas sejam de alunos que estudam a tarde.

enade_historia2 = enade_historia_2017_Sem_NA %>%
  select(Raca_Cor, NT_GER) %>%
  group_by(Raca_Cor) %>%
  summarise(
    Quantidade = n(),
    MediaNota = mean(NT_GER, na.rm = T),
    Mediana = median(NT_GER, na.rm = T),
    CV = sd(NT_GER, na.rm = T) / MediaNota * 100,
    AmplitudeInterquartil = IQR(NT_GER),
    assimetria = skewness(NT_GER),
    curtose = kurtosis(NT_GER)
  ) %>%
  arrange(desc(Mediana))
## `summarise()` ungrouping output (override with `.groups` argument)
enade_historia2  %>% kbl %>% kable_styling(full_width = F)
Raca_Cor Quantidade MediaNota Mediana CV AmplitudeInterquartil assimetria curtose
Não quero declarar 688 45.26105 46.6 34.45419 21.425 -0.4227013 0.2149148
Branca 6175 45.66607 45.8 32.47281 21.200 -0.0501145 -0.3195162
Preta 2173 41.61542 41.4 33.83637 20.000 -0.0500513 -0.1795425
Parda 4803 41.80633 41.3 33.65555 20.000 0.0943885 -0.3040192
Amarela 221 41.06833 40.8 35.14934 19.800 0.1008589 -0.3321779
Indígena 103 37.94951 34.6 37.96446 21.350 0.3591805 -0.2948438

Quando analisamos somente por Raça/Cor, fica demonstrado que pessoas que se declaram Brancas têm uma média mais alta (45.6), e até 50% destes, ficou, ligeiramente, acima da média (45.8).

Pode-se destacar também a pouca quantidade de estudantes de origem Indígena.

#Histograma
histograma = ggplot(enade_historia_2017_Sem_NA, aes(x = NT_GER, fill = Raca_Cor)) +
  geom_histogram() +
  ggtitle("Gráfico histograma da Nota por raça/cor") +
  xlab("Notas") +
  ylab("Frequência simples") +
  facet_grid( ~ Raca_Cor)

ggplotly(histograma)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
boxplot = ggplot(enade_historia_2017_Sem_NA, aes(x = Raca_Cor, y = NT_GER, fill =
                                       Raca_Cor)) +
  geom_boxplot() +
  ggtitle("Gráfico de Box-plot da Nota por raça/cor e turno de estudo") +
  xlab("Raca / Cor") +
  ylab("Notas") +
  facet_grid( ~ Turno_Graduacao) +
  theme(axis.text.x = element_text(
    angle = 90,
    vjust = 0.5,
    hjust = 1
  ))


ggplotly(boxplot)
grid.arrange(histograma, boxplot, nrow = 2, ncol = 1)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## Analisando Renda familiar e Raça

prop.table(table(enade_historia_2017_Sem_NA$Renda_Familiar,
      enade_historia_2017_Sem_NA$Raca_Cor)) %>% kbl %>% kable_styling()
Amarela Branca Indígena Não quero declarar Parda Preta
Acima de 30 salários mínimos (mais de R$ 28.110,00) 0.0000000 0.0025418 0.0000000 0.0002824 0.0002824 0.0000000
Até 1,5 salário mínimo (até R$ 1.405,50) 0.0060016 0.0945421 0.0034597 0.0137683 0.1267387 0.0636165
De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) 0.0053661 0.1347878 0.0018358 0.0148980 0.1092989 0.0480124
De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00) 0.0002118 0.0204053 0.0001412 0.0019064 0.0066370 0.0017652
De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50) 0.0022594 0.0938361 0.0010591 0.0097437 0.0555673 0.0244299
De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00). 0.0010591 0.0462473 0.0004942 0.0040952 0.0233708 0.0096025
De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00) 0.0007061 0.0436348 0.0002824 0.0038834 0.0172280 0.0060016
enade_historia3 = enade_historia_2017_Sem_NA %>%
  select(Raca_Cor, Renda_Familiar, NT_GER) %>%
  group_by(Raca_Cor, Renda_Familiar) %>%
  summarise(
    Quantidade = n(),
    MediaNota = mean(NT_GER, na.rm = T),
    Mediana = median(NT_GER, na.rm = T),
    CV = sd(NT_GER, na.rm = T) / MediaNota * 100,
    AmplitudeInterquartil = IQR(NT_GER),
    assimetria = skewness(NT_GER),
    curtose = kurtosis(NT_GER)
  ) %>%
  arrange(desc(Mediana))
## `summarise()` regrouping output by 'Raca_Cor' (override with `.groups` argument)
enade_historia3  %>% kbl %>% kable_styling(full_width = F)
Raca_Cor Renda_Familiar Quantidade MediaNota Mediana CV AmplitudeInterquartil assimetria curtose
Branca De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00) 289 55.59585 57.50 26.011774 19.000 -0.3159253 -0.1327697
Parda Acima de 30 salários mínimos (mais de R$ 28.110,00) 4 51.72500 56.10 36.634016 24.375 -0.3084677 -2.0906139
Branca Acima de 30 salários mínimos (mais de R$ 28.110,00) 36 55.76111 55.15 20.150144 12.750 0.2936256 -0.1448773
Preta De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00) 25 54.89600 55.00 22.383746 13.000 -1.0986656 2.5625618
Parda De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00) 94 51.63085 52.75 29.114504 18.625 -0.6031806 0.3828380
Não quero declarar De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00) 55 50.31455 52.40 36.063508 21.500 -0.8046712 0.3212118
Não quero declarar De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00). 58 46.51897 50.80 38.322067 20.600 -0.4972811 -0.2120873
Indígena De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00) 2 50.75000 50.75 3.483285 1.250 0.0000000 -2.7500000
Branca De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00) 618 49.41699 50.45 30.458367 19.325 -0.3223135 0.0159366
Amarela De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00) 3 49.93333 49.90 5.707903 2.850 0.0116937 -2.3333333
Branca De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00). 655 48.04015 48.40 30.502716 22.000 -0.1121815 -0.5216363
Não quero declarar De 10 a 30 salários mínimos (R$ 9.370,01 a R$ 28.110,00) 27 48.26296 48.40 38.600437 21.850 -0.4644346 -0.4686908
Indígena De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00) 4 51.35000 48.30 41.616044 21.000 0.2830050 -1.9411826
Não quero declarar De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50) 138 47.33116 47.85 31.064376 19.175 -0.3767798 0.5329958
Parda De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00) 244 48.13197 47.60 29.478813 21.875 0.1065208 -0.7090444
Preta De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00) 85 45.49059 47.30 35.074372 23.900 -0.3722412 -0.5313342
Não quero declarar Acima de 30 salários mínimos (mais de R$ 28.110,00) 4 46.40000 46.95 37.875891 27.900 -0.0201294 -2.3885977
Preta De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00). 136 44.78529 46.65 33.052256 19.700 -0.3217773 0.3580806
Branca De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50) 1329 46.19142 46.40 31.746123 20.500 -0.0926032 -0.1784155
Parda De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00). 331 46.15468 46.30 32.008563 20.650 -0.0167756 -0.3154591
Indígena De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00). 7 45.61429 46.10 27.361404 14.150 0.4332468 -1.2133183
Não quero declarar De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) 211 44.47536 45.90 31.131234 20.300 -0.3282362 0.1456391
Amarela De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50) 32 46.23438 44.60 33.820985 28.725 0.1383614 -1.4855476
Branca De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) 1909 44.26307 44.20 31.832729 19.800 0.0007558 -0.2641856
Não quero declarar Até 1,5 salário mínimo (até R$ 1.405,50) 195 42.40769 44.10 36.817516 20.950 -0.4790011 0.1269771
Parda De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50) 787 43.05947 43.30 32.324978 19.700 -0.0604088 -0.2245132
Preta De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) 680 42.31676 42.10 33.167967 19.125 -0.0708628 0.0729052
Branca Até 1,5 salário mínimo (até R$ 1.405,50) 1339 41.83779 41.40 34.585496 20.500 0.0310309 -0.4413465
Amarela De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) 76 40.83947 41.05 37.671159 20.925 0.1372554 -0.5725849
Amarela De 4,5 a 6 salários mínimos (R$ 4.216,51 a R$ 5.622,00). 15 43.32667 41.00 32.908726 21.700 -0.0632083 -0.8997702
Parda De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) 1548 41.55820 40.90 33.344122 19.700 0.1317814 -0.2882463
Preta De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50) 346 41.01879 40.65 33.384947 19.400 -0.0451451 -0.2224203
Preta Até 1,5 salário mínimo (até R$ 1.405,50) 901 40.10266 40.10 34.073254 19.400 0.0212818 -0.3499733
Indígena De 1,5 a 3 salários mínimos (R$ 1.405,51 a R$ 2.811,00) 26 38.32692 40.05 36.266188 18.450 -0.2463574 -0.2190434
Parda Até 1,5 salário mínimo (até R$ 1.405,50) 1795 39.27259 38.80 34.003821 18.950 0.0934861 -0.3285444
Amarela Até 1,5 salário mínimo (até R$ 1.405,50) 85 38.99647 38.50 31.266572 16.800 0.0638005 0.6156340
Amarela De 6 a 10 salários mínimos (R$ 5.622,01 a R$ 9.370,00) 10 37.84000 37.60 52.274719 30.575 -0.1783932 -1.7028779
Indígena Até 1,5 salário mínimo (até R$ 1.405,50) 49 36.62041 33.00 40.192410 23.000 0.4659845 -0.7469942
Indígena De 3 a 4,5 salários mínimos (R$ 2.811,01 a R$ 4.216,50) 15 32.78000 28.40 33.492446 17.250 0.4422869 -1.4002112

Outro ponto que chama atenção é a diferença entre a média das notas gerais de pessoas que se declaram Brancas e com Renda Familiar entre 10 e 30 salários mínimos, com média 55.59 e pessoas que se declaram Indígenas, que, apesar da pouca quantidade, obtiveram média bem abaixo.

#Histograma
histograma = ggplot(enade_historia_2017_Sem_NA, aes(x = NT_GER, fill = Renda_Familiar)) +
  geom_histogram() +
  ggtitle("Gráfico histograma da Nota por renda familiar do aluno") +
  xlab("Notas") +
  ylab("Frequência simples") +
  facet_grid( ~ Renda_Familiar)

ggplotly(histograma)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
boxplot = ggplot(enade_historia_2017_Sem_NA, aes(x = Raca_Cor, y = NT_GER, fill =
                                       Raca_Cor)) +
  geom_boxplot() +
  ggtitle("Gráfico de Box-plot da Nota por raça/cor e renda familiar") +
  xlab("Raca / Cor") +
  ylab("Notas") +
  facet_grid( ~ Renda_Familiar) +
  theme(axis.text.x = element_text(
    angle = 90,
    vjust = 0.5,
    hjust = 1
  ))


ggplotly(boxplot)